
在自然语言处理(NLP)任务中,文本预处理是获取高效模型性能的关键步骤。本教程将介绍如何使用Transformers库中的Tokenizer进行文本预处理。
文本数据的处理主要通过Tokenizer完成。Tokenizer用于将文本分解成tokens,将这些tokens转换成数字,再转换成张量,这样才能被模型使用。下面我们将通过一些示例来演示如何使用Tokenizer进行文本预处理。
首先,我们通过AutoTokenizer.from_pretrained()方法加载一个预训练的tokenizer。以下是一个如何实现此步骤的示例:
from transformers import AutoTokenizer
def auto_token():
tokenizer = AutoTokenizer.from_pretrained("openbmb/MiniCPM-2B-dpo-bf16")
encoded_input = tokenizer(["你是谁", "我是路条编程", "你好啊"])
print("encoded_input:" + str(encoded_input))
print("decode:" + str(tokenizer.decode(encoded_input["input_ids"])))
# 输出示例:
# encoded_input: {'input_ids': [[1, 95320, 13600, 96306], [1, 79178, 95644, 95548, 18744], [1, 95320, 23523, 96240]], 'attention_mask': [[1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1]]}
# decode: <s> 你是谁 <s> 我是路条编程 <s> 你好啊
tokenizer返回的字典包含以下几个重要对象:
input_ids:每个token对应的索引。
attention_mask:指示模型是否应关注某个token。
token_type_ids:标识token属于哪个序列(在多序列输入的情况下)。

你可以将单个字符串或字符串数组传递给tokenizer:
tokenizer("你是谁")
tokenizer(["你是谁", "我是路条编程", "你好啊"])
不同句子的长度可能不同,我们通过在短句子中添加padding token来解决这一问题。如果使用padding=True,需要确保已设置pad_token。
注意,使用padding=True进行填充时,需要设置一个填充令牌(pad_token)
将已有的特殊令牌指定为填充令牌:如果tokenizer已经有了结束符(EOS)令牌或其他特殊令牌,你可以将其设置为填充令牌。这种方法适用于那些已经定义了结束符令牌的预训练模型。例如,对于很多基于Transformer的模型,结束符令牌可以作为填充令牌使用。
tokenizer.pad_token = tokenizer.eos_token
向tokenizer添加一个新的填充令牌:如果你的模型或数据处理策略需要一个明确的填充令牌,且现有的特殊令牌不适合用作填充令牌,你可以添加一个新的填充令牌。这通常通过调用add_special_tokens方法完成。
tokenizer.add_special_tokens({'pad_token': '[PAD]'}
tokenizer.pad_token = tokenizer.eos_token # 使用EOS令牌作为填充令牌
tokenizer(["你是谁", "我是路条编程", "你好啊"], padding=True)
对于过长的序列,我们可以通过设置truncation=True将其截断到模型可以接受的长度:
tokenizer(["你是谁", "我是路条编程", "你好啊"], padding=True, truncation=True)
查看填充和截断概念指南,了解更多有关填充和截断参数的信息。
最后,tokenizer可以返回直接输入到模型的张量。设置return_tensors参数为pt(PyTorch)或tf(TensorFlow):
tokenizer(["你是谁", "我是路条编程", "你好啊"], padding=True, truncation=True, return_tensors="pt")


code/s?__biz=MzIwNjYwNDQxMw==&mid=2247494711&idx=2&sn=418e1e963145959c8f973b057e7b5021&chksm=971dbd25a06a3433a249ed2515c16441d7ad1a63746621e16db343c8e8f95eaf415e7b024261#rd